﻿///
/// En este archivo se definen los modelos, estos modelos hacen referencia a 2 puntos importantes.
/// Por un lado tenemos los handlers que se van a llamar para cada accion que se quiera realizar con los datos.
/// Al cargar los registros, ya sea uno o varios, se utiliza el de Read.
/// Al crear un registro se utiliza el create.
/// Al borrar un registro se utiliza el destroy.
/// Al actualizar un registro se utiliza else update.
/// Por ultimo tenemos el getnum que es utilizado por la funcion GetNum de FormBase.
///
/// Los fields definen los campos que va a tener y son los que hace referencia la propiedad dataIndex de las columnas.
/// estos fields tienen q tener el mismo nombre que se devuelve desde el read del handler (case sensitive).
///
/// La propiedad idProperty define el field o fields que se van a comportar como clave primaria. 
/// Esto evita que haya repetidos o se pueda obtener un objeto por su clave primaria.
///
/// Por ultimo las propiedades reader y writer tienen que ser copiadas tal cual, sino el ABM no va a funcionar como debe.
///

function GenerarProxy(url) {
    return {
        type: 'ajax',
        listeners: { exception: function (obj, res, opr) {
            try {
                var resValue = Ext.JSON.decode(res.responseText);
                if (resValue.success === false) {
                    ShowError(resValue.message);
                }
            } catch (e) { }
        }
        },
        api: {
            read: url + '?action=List',
            create: url + '?action=Create',
            destroy: url + '?action=Delete',
            update: url + '?action=Update'
        },
        reader: {
            type: 'json',
            root: 'gridData',
            messageProperty: 'message'
        },
        writer: {
            type: 'json',
            writeAllFields: true,
            root: 'data',
            allowSingle: false,
            messageProperty: 'message'
        }
    };
}

Ext.define('StartFrame.data.FirstEmptyStore', {
    extend: 'Ext.data.Store',
    listeners: {
        load: function (str) {
            var rcd = str.model.create();
            str.insert(0, rcd);
        }
    }
});

Ext.define('Model.Usuarios',
{
    extend: 'Ext.data.Model',
    fields: ['cd_operador', 'nm_operador', 'nu_interno_telefono', { name: 'st_bloqueado', type: 'bool' }, 'cd_barra_herr', { name: 'st_tracking', type: 'bool' }, { name: 'st_cambiar_clave', type: 'bool' }, 'va_clave_acceso', { name: 'fe_alta', type: 'date' }, 'de_notas', 'cd_tema'],
    idProperty: 'cd_operador',
    proxy: GenerarProxy('Handlers/Mantenimiento/Administracion/Seguridad/ConfUsuarios.ashx')
});

Ext.define('Model.GrupoOperadores',
{
    extend: 'Ext.data.Model',
    fields: ['cd_grupo_operadores', 'nm_grupo_operadores', 'nm_sector', { name: 'st_privilegio_adm', type: 'bool' }, { name: 'st_privilegio_sup', type: 'bool' }, { name: 'st_privilegio_abm', type: 'bool' }, { name: 'st_privilegio_cons', type: 'bool' }, 'cd_operador', 'fe_alta', { name: 'st_activo', type: 'bool'}],
    idProperty: 'cd_grupo_operadores',
    proxy: GenerarProxy('Handlers/Mantenimiento/GrupoOperadores.ashx')
});

Ext.define('Model.Procuradores',
{
    extend: 'Ext.data.Model',
    fields: [
        { name: 'id', persist: false },
        'idSucursal',
        'Nombre',
        'Apellido',
        'Direccion',
        'idLocalidad',
        'idProvincia',
        'Telefono',
        'celular',
        'email',
        'clave',
        'habilitado',
        'idNivel',
        'ultimoacceso',
        'actual',
        'tpRecorrida',
        'cd_operador'],
    idProperty: 'id',
    proxy: GenerarProxy('Handlers/Mantenimiento/Procuradores.ashx')
});

Ext.define('Model.Sucursales',
{
    extend: 'Ext.data.Model',
    fields: ['idSucursal',
        'idPadre',
        'Empresa',
        'Apellido',
        'Nombre',
        'Domicilio',
        'idLocalidad',
        'idProvincia',
        'idPais',
        'Tel1',
        'Tel2',
        'Tel3',
        'email',
        'clave',
        'ultimoingreso',
        'ingresoactual',
        'ipingreso',
        'cuit',
        'idCatefiscal'],
    idProperty: 'idSucursal',
    proxy: GenerarProxy('Handlers/Mantenimiento/Sucursales.ashx')
});

Ext.define('Model.Provincias',
{
    extend: 'Ext.data.Model',
    fields: ['idProvincia',
                'Provincia',
                'idPais'],
    idProperty: 'idProvincia',
    proxy: GenerarProxy('Handlers/Mantenimiento/Provincias.ashx')
});

Ext.define('Model.Localidades',
{
    extend: 'Ext.data.Model',
    fields: ['idLocalidad',
                'Localidad',
                'idProvincia'],
    idProperty: 'idLocalidad',
    proxy: GenerarProxy('Handlers/Mantenimiento/Localidades.ashx')
});

Ext.define('Model.AccesoRecorridas',
{
    extend: 'Ext.data.Model',
    fields: [
        { name: 'id', persist: false },
        'idCategoria',
        'descripcion',
        'aux1',
        'aux2'],
    idProperty: 'id',
    proxy: GenerarProxy('Handlers/Mantenimiento/AccesoRecorridas.ashx')
});

Ext.define('Model.Juzgados',
{
    extend: 'Ext.data.Model',
    fields: ['id',
        'Juzgado',
        'Parametro',
        'idDepartamento',
        'idFuero',
        'SoloMev',
        'identificador',
        'secretaria',
        'idSede',
        'domicilio',
        'idCompetencia',
        'idGrupo',
        'idJurisdiccion'],
    idProperty: 'id',
    proxy: GenerarProxy('Handlers/Mantenimiento/Juzgados.ashx')
});

Ext.define('Model.Feriados',
{
    extend: 'Ext.data.Model',
    fields: [
        'id',
        'Fecha',
        'Nombre'],
    idProperty: 'id',
    proxy: GenerarProxy('Handlers/Mantenimiento/Feriados.ashx')
});

Ext.define('Model.diasRecorrida',
{
    extend: 'Ext.data.Model',
    fields: ['FechaAsignado'],
    idProperty: 'FechaAsignado',
    proxy: {
        type: 'ajax',
        api: {
            read: 'Handlers/Consultas/Recorridos.ashx?action=ObtenerDias'
        },
        reader: {
            type: 'json',
            root: 'gridData',
            messageProperty: 'message'
        }
    }
});

Ext.define('Model.listaRecorrida',
{
    extend: 'Ext.data.Model',
    fields: ['id', 'descripcion'],
    idProperty: 'id',
    proxy: {
        type: 'ajax',
        api: {
            read: 'Handlers/Consultas/Recorridos.ashx?action=ObtenerRecorridas'
        },
        reader: {
            type: 'json',
            root: 'gridData',
            messageProperty: 'message'
        }
    }
});